home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Sunday Times: The Month 2003 December
/
The Sunday Times - The Month 2003-12.iso
/
mac
/
The Month DEC 03
/
engine
/
modules
/
text_pages.swf
/
scripts
/
frame_2
/
DoAction.as
Wrap
Text File
|
2003-11-04
|
5KB
|
154 lines
function searchandreplace(the_string, search_string, replace_string, occurrences, backward)
{
if(search_string == replace_string)
{
return the_string;
}
var found = 0;
if(backward == true)
{
var pos = the_string.lastIndexOf(search_string);
while(pos >= 0)
{
found++;
var start_string = the_string.substr(0,pos);
var end_string = the_string.substr(pos + search_string.length);
the_string = start_string + replace_string + end_string;
pos = the_string.lastIndexOf(search_string,start_string.length);
if(found == occurrences)
{
pos = -1;
}
}
}
else
{
var pos = the_string.indexOf(search_string);
while(pos >= 0)
{
found++;
var start_string = the_string.substr(0,pos);
var end_string = the_string.substr(pos + search_string.length);
the_string = start_string + replace_string + end_string;
pos = the_string.indexOf(search_string,pos + replace_string.length);
if(found == occurrences)
{
pos = -1;
}
}
}
return the_string;
}
function tagStack(aString)
{
var error = false;
var tagArray = [];
var validTags = ["a","b","i","u","font","p"];
var tStringArray = aString.split("<");
var i = 1;
while(i < tStringArray.length)
{
var newTag = "<" + tStringArray[i].slice(0,tStringArray[i].indexOf(">") + 1);
var shortForm = newTag.indexOf(" ") <= -1 ? newTag : newTag.slice(0,newTag.indexOf(" ")) + ">";
var tagOnly = shortForm.indexOf("/") <= -1 ? shortForm.slice(1,-1) : shortForm.slice(2,-1);
isValidTag = false;
for(var j in validTags)
{
if(validTags[j] == tagOnly)
{
isValidTag = true;
break;
}
}
if(isValidTag)
{
if(newTag.charAt(1) == "/")
{
var lastTag = tagArray.pop();
lastTagShort = lastTag.indexOf(" ") <= -1 ? lastTag : lastTag.slice(0,lastTag.indexOf(" ")) + ">";
lastTagShort = lastTagShort.indexOf("/") <= -1 ? lastTagShort.slice(1,-1) : lastTagShort.slice(2,-1);
if(lastTagShort != tagOnly)
{
error = true;
trace("Error! Next closing tag should be " + lastTag + ", not " + newTag);
trace("Tag Stack ::" + tagArray + "::");
break;
}
}
else
{
tagArray.push(newTag);
}
}
i++;
}
return !error ? tagArray : -1;
}
function fixText(textString)
{
var tempText = searchandreplace(textString,String.fromCharCode(13)," <br>");
tempText = searchandreplace(textString,"\n"," <br>");
tempText = searchandreplace(textString,"\r"," <br>");
tempText = searchandreplace(tempText,String.fromCharCode(9)," ");
var textArray = tempText.split(" ");
return textArray;
}
function flowText(textString, arrayOfTextFields)
{
trace("flowText ( \'" + textString.substr(0,15) + "...\' , " + arrayOfTextFields + " ) ");
var textArray = fixText(textString);
var currentWordIndex = 0;
var currentFieldIndex = 0;
var maxWordIndex = textArray.length;
var timeArray = [];
var leftOverTags = "";
var i;
var lastWord = 0;
for(i in arrayOfTextFields)
{
eval(arrayOfTextFields[i]).html = false;
eval(arrayOfTextFields[i]).text = "";
eval(arrayOfTextFields[i]).htmlText = "";
}
do
{
if(currentWordIndex >= maxWordIndex)
{
return true;
}
var field = eval(arrayOfTextFields[currentFieldIndex]);
var tempString = "";
field.html = true;
if(textArray[currentWordIndex].indexOf("<br>") != -1)
{
textArray[currentWordIndex] = searchandreplace(textArray[currentWordIndex],"<br>","");
}
i = currentWordIndex;
while(i < maxWordIndex)
{
var newWord = textArray[i];
newWord = newWord != "<br>" ? newWord + " " : newWord;
tempString += newWord;
field.htmlText = "";
field.htmlText = tempString;
if(field.maxscroll > 1)
{
lastWord = i;
break;
}
i++;
}
field.htmlText = "";
var endAt = i;
field.htmlText = leftOverTags + textArray.slice(currentWordIndex,endAt).join(" ");
leftOverTags = tagStack(textArray.slice(0,endAt).join(" ")).join("");
currentWordIndex = endAt;
currentFieldIndex++;
}
while(currentFieldIndex <= arrayOfTextFields.length);
trace("Not enough text fields to hold all the text.");
var leftOverText = textArray.slice(lastWord,textArray.length).join(" ");
return leftOverText;
}